"""
让二进制数：
1、最低位的1变为0，比它低的全从0变为1   num-1
2、最低位的1变0，其余不变  num & num-1
3、找出最低位的1所在位置
    pos = 0
    for i in range(32):
        if (res >> i) & 1 == 1:
            pos = i
            break
4、只保留最低位的1，其他位置全变为0
num & -num，比如 6 & -6 = 0110 & 1010=0010，所以6的最低位的1是第二位。原理就是取反+1
或者 num & ~(num - 1)
5、得到一个数的负数（不管正负）    ~num + 1 or ~(num - 1)
"""

